package cn.catsdad.base.page;

import cn.catsdad.util.StringUtil;
import lombok.Data;
import lombok.experimental.Accessors;

import java.util.*;

/**
 * 分页对象
 *
 * @author xuyl
 * @version V1.0.0 2024/7/6
 * @since V100R001
 */
@Data
@Accessors(chain = true)
public class PageBean<T> {

    /**
     * 页码
     */
    private int page;

    /**
     * 每页条数
     */
    private int size;

    /**
     * 数据总条数
     */
    private int total;

    /**
     * 排序字符串，-标识降序，+标识升序
     * 如 createTime-,modifiedTime+排序规则
     * 会被解析为 order by createTime DESC,modifiedTime ASC
     */
    private String sort;

    /**
     * 实际的查询语句
     */
    private String query;

    /**
     * 实体名称
     */
    private String entityName;

    /**
     * 查询结果
     */
    private List<T> queryResult = new ArrayList<>();

    /**
     * 将sort字符串解析为实际的排序sql
     *
     * @return 排序规则
     */
    public List<Map<String, String>> getOrderBy() {
        List<Map<String, String>> result = new ArrayList<>();
        if (StringUtil.isNotEmpty(this.sort)) {
            List<String> sortItemStrList = new ArrayList<>();
            //将多个规则拆解
            if (this.sort.contains(",")) {
                String[] sortItems = this.sort.split(",");
                sortItemStrList = Arrays.asList(sortItems);
            } else {
                sortItemStrList.add(this.sort);
            }
            //翻译升序降序符号
            for (String sortItem : sortItemStrList) {
                Map<String, String> sartParam = new HashMap<>();
                if (sortItem.contains("-")) {
                    sartParam.put(sortItem.replace("-", ""), "desc");
                } else {
                    sartParam.put(sortItem.replace("+", ""), "asc");
                }
                result.add(sartParam);
            }
        }
        return result;
    }

}
